import ISdkManager from "./ISdkManager";

/**
 * 抖音
 */
const tt = window["tt"]

const VIDEO_ID = "6cto8604ktl5h1sbtu"; // 激励视屏id
const INTERSTITIAL_ID = "13ll86iohpka625a3g"; // 插屏id

export default class ByteSdkManager implements ISdkManager {
    private _mInterstitialAd: any = null;
    private _mVideoAd: any = null;
    private _curTime: number = Date.now();
    /**插屏广告等待时间  秒*/
    private _interstitialAwaitTime: number = 0;
    private resetInAdDownTime() {
        this._curTime = Date.now();
        this._interstitialAwaitTime = 60;
    }

    /**是否可以显示插屏 */
    private enableInterstitial(): boolean {
        return Date.now() - this._curTime >= this._interstitialAwaitTime * 1000;
    }

    init() {
        this._interstitialAwaitTime = 30;
    }

    login() {
        throw new Error("Method not implemented.");
    }


    /**插屏广告 */
    showInterstitialAd() {
        if (!this.enableInterstitial()) {
            console.log("不能连续显示插屏广告");
            return;
        }

        if (this._mInterstitialAd) {
            this._mInterstitialAd.destroy();
        }

        this._mInterstitialAd = tt.createInterstitialAd({ adUnitId: INTERSTITIAL_ID });
        let self = this;
        this._mInterstitialAd.onLoad(() => {
            self._mInterstitialAd.show().then(() => {
                this.resetInAdDownTime();
                console.log("插屏广告显示成功");
            });
        });

        let canReTry = true;
        this._mInterstitialAd.onError((err) => {
            console.log("插屏广告显示失败");
            // 这里要等待一定时间后，或者等待下次需要展示的时候，参考频控，尝试一次，或者几次，不能一直尝试。
            if (canReTry) {
                canReTry = false;
                this._mInterstitialAd.load(); //如果需要，这里等待一定时间后，或者等待下次需要展示的时候，再次 load->onLoad-> show。
            } else {
                tt.showToast({
                    title: "暂无广告",
                    icon: "none",
                });
            }

        });
    }

    showVideo(cb: Function) {
        if (!this._mVideoAd) {
            this._mVideoAd = tt.createRewardedVideoAd({
                adUnitId: VIDEO_ID,
            });

        } else {
            this._mVideoAd.destroy()
                .then(() => {
                    //这里再次创建其他adUnitId的广告实例
                    this._mVideoAd = null;
                    this.showVideo(cb);
                })
                .catch((err) => {
                    console.log("广告组件出现问题", err);
                });

            return;
        }

        this._mVideoAd.onClose(res => {
            // 用户点击了【关闭广告】按钮
            if (res && res.isEnded || res === undefined) {
                // 正常播放结束，可以下发游戏奖励的逻辑
                self.resetInAdDownTime();
                cb(1);
            }
            else {
                cb(0);
                // 播放中途退出，不下发游戏奖励
                // director.resume();
            }
        });

        this._mVideoAd.onError((err) => {
            console.log("播放激励视屏错误：", err);
        });

        let self = this;

        this._mVideoAd.show().catch(() => {
            cb(-2);
            console.log('激励视频 广告显示失败')
            // 失败重试
            self._mVideoAd.load()
                .then(() => {
                    self._mVideoAd.show();
                })
                .catch(err => {
                    console.log('激励视频 广告显示失败')
                    // director.resume();
                    cb(-2);
                })
        });

    }

    share(cb: Function) {
        tt.shareAppMessage({
            channel: "invite", // 拉起邀请面板分享游戏好友
            title: "一起来吃瓜吧！",
            desc: "快来加入我们！",
            imageUrl: "",
            query: "",
            success(res) {
                cb();
                console.log("分享成功" + JSON.stringify(res));
            },
            fail(e) {
                console.log("分享失败");
            },
        });
    }

}
